/**
 * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information regarding copyright ownership. Apereo
 * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use
 * this file except in compliance with the License. You may obtain a copy of the License at the
 * following location:
 *
 * <p>http://www.apache.org/licenses/LICENSE-2.0
 *
 * <p>Unless required by applicable law or agreed to in writing, software distributed under the
 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apereo.portal.persondir;

import java.util.Date;
import java.util.List;
import java.util.Map;

/** A person account stored in the local uPortal database */
public interface ILocalAccountPerson {
    // common attribute names...
    /**
     * Attribute name commonly used to retrieve users displayName. This attribute may not exist for
     * all users, and may be named differently for some implementations, but this is common. @Since
     * uPortal 4.1
     */
    public static final String ATTR_DISPLAY_NAME = "displayName";

    /**
     * Attribute name commonly used to retrieve users email address. This attribute may not exist
     * for all users, and may be named differently for some implementations, but this is
     * common. @since 4.1
     */
    public static final String ATTR_MAIL = "mail";

    public long getId();

    public String getName();

    public String getPassword();

    public void setPassword(String password);

    public Date getLastPasswordChange();

    public void setLastPasswordChange(Date lastPasswordChange);

    public Object getAttributeValue(String name);

    public List<Object> getAttributeValues(String name);

    public Map<String, List<Object>> getAttributes();

    public void setAttribute(String name, String... values);

    public void setAttribute(String name, List<String> values);

    public void setAttributes(Map<String, List<String>> values);

    public boolean removeAttribute(String name);
}
